home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_01_07 / 1n07048a < prev    next >
Text File  |  1990-11-05  |  5KB  |  187 lines

  1.  
  2.  
  3. /*************************************************
  4. * NBLIBC.C -- NETBIOS library routines
  5. *
  6. *     Copyright 1990 Tom Jensen
  7. *************************************************/
  8.  
  9. #include <stddef.h>
  10. #include <string.h>
  11. #include <dos.h>
  12. #include "netbios.h"
  13.  
  14. /************************************************
  15. * NbNcbInit -- Initialize Network Control Block.
  16. ************************************************/
  17.  
  18. void NbNcbInit (struct NcbData *ncb, unsigned char cmd,
  19.   char *lnam, char *fnam)
  20. {
  21.     memset (ncb, (char)0, sizeof (struct NcbData));
  22.     ncb->Command = cmd;
  23.     NbExpandName (ncb->Name, lnam);
  24.     NbExpandName (ncb->CallName, fnam);
  25. }
  26.  
  27. /*****************************************************
  28. * NbExpandName -- Copy a name with trailing spaces to
  29. *                 a buffer.
  30. *****************************************************/
  31.  
  32. void NbExpandName (char *buffer, char *name)
  33. {
  34.     int i;
  35.  
  36.     /* Insure name pointer is valid */
  37.     if (name == NULL)
  38.         name = "";
  39.     strncpy (buffer, name, 16);
  40.     if ((i = strlen (name)) < 16)
  41.         memset (&buffer[i], ' ', 16 - i);
  42. }
  43.  
  44. /****************************************
  45. * NbAddName -- Add a local network name.
  46. ****************************************/
  47.  
  48. unsigned NbAddName (struct NcbData *ncb, char *lnam)
  49. {
  50.     NbNcbInit (ncb, NET_ADD_NAME, lnam, NULL);
  51.     return NBCALL (ncb);
  52. }
  53.  
  54. /*******************************************
  55. * NbDelName -- Delete a local network name.
  56. *******************************************/
  57.  
  58. unsigned NbDelName (struct NcbData *ncb, char *lnam)
  59. {
  60.     NbNcbInit (ncb, NET_DEL_NAME, lnam, NULL);
  61.     return (NBCALL (ncb));
  62. }
  63.  
  64. /*****************************************************
  65. * NbListen -- Allow a network session to be opened by
  66. *     another node.  See NbOpenSession().
  67. *
  68. *   *ses = session number if established
  69. *****************************************************/
  70.  
  71. unsigned NbListen (struct NcbData *ncb, char *lnam,
  72.   char *fnam, unsigned char *ses)
  73. {
  74.     unsigned reterr;
  75.  
  76.     NbNcbInit (ncb, NET_LISTEN, lnam, fnam);
  77.     reterr = NBCALL (ncb);
  78.  
  79.     if (reterr == NB_OK)
  80.         *ses = ncb->LSN;
  81.  
  82.     return reterr;
  83. }
  84.  
  85. /*********************************************************
  86. * NbPostListen -- Allow a network session to be opened by
  87. *     another node with no-wait option.
  88. *
  89. * Note: session number must be retrieved from NCB after
  90. *       completion.
  91. *********************************************************/
  92.  
  93. unsigned NbPostListen (struct NcbData *ncb, char *lnam,
  94.   char *fnam)
  95. {
  96.     NbNcbInit (ncb, NET_LISTEN | NET_NOWAIT, lnam, fnam);
  97.     SETPOSTADDR ((void far *)(&(ncb->Post.pfar)));
  98.     return (NBCALL (ncb));
  99. }
  100.  
  101. /****************************************************
  102. * NbOpenSession -- Open a network session with fnam.
  103. *     fnam must be listening.
  104. *
  105. *   *ses = session number if established
  106. ****************************************************/
  107.  
  108. unsigned NbOpenSession (struct NcbData *ncb, char *lnam,
  109.   char *fnam, unsigned char *ses)
  110. {
  111.     unsigned reterr;
  112.  
  113.     NbNcbInit (ncb, NET_CALL, lnam, fnam);
  114.     reterr = NBCALL (ncb);
  115.  
  116.     if (reterr == NB_OK)
  117.         *ses = ncb->LSN;
  118.  
  119.     return reterr;
  120. }
  121.  
  122. /*******************************************************
  123. * NbCloseSession -- Close network session number "ses".
  124. *******************************************************/
  125.  
  126. unsigned NbCloseSession (struct NcbData *ncb, char *lnam,
  127.   char *fnam, unsigned char ses)
  128. {
  129.     NbNcbInit (ncb, NET_HANGUP, lnam, fnam);
  130.     ncb->LSN = ses;
  131.     return (NBCALL (ncb));
  132. }
  133.  
  134. /***********************************************************
  135. * NbCancel -- Cancel pending NCB command pointed to by ncb.
  136. ***********************************************************/
  137.  
  138. unsigned NbCancel (struct NcbData *ncb)
  139. {
  140.     NbNcbInit (ncb, NET_CANCEL, NULL, NULL);
  141.     ncb->Buffer.pfar = (struct NcbData far *) ncb;
  142.     return (NBCALL (ncb));
  143. }
  144.  
  145. /*********************************************************
  146. * NbSessionStatus -- Get network session status for local
  147. *     name.
  148. *********************************************************/
  149.  
  150. unsigned NbSessionStatus (struct NcbData *ncb, char *lnam,
  151.   char *fnam, char *buffer, int bufsiz)
  152. {
  153.     NbNcbInit (ncb, NET_SES_STAT, lnam, fnam);
  154.     ncb->Buffer.pfar = (struct NcbData far *) buffer;
  155.     ncb->Length = bufsiz;
  156.     return (NBCALL (ncb));
  157. }
  158.  
  159. /*********************************************
  160. * NbSendData -- Send a data to a remote node.
  161. *********************************************/
  162.  
  163. unsigned NbSendData (struct NcbData *ncb, char *lnam,
  164.   char *fnam, char *buffer, int bufsiz, unsigned char ses)
  165. {
  166.     NbNcbInit (ncb, NET_SEND, lnam, fnam);
  167.     ncb->LSN = ses;
  168.     ncb->Buffer.pfar = (char far *) buffer;
  169.     ncb->Length = bufsiz;
  170.     return (NBCALL (ncb));
  171. }
  172.  
  173. /***************************************************
  174. * NbReceiveData -- Receive data from a remote node.
  175. ***************************************************/
  176.  
  177. unsigned NbReceiveData (struct NcbData *ncb, char *lnam,
  178.   char *fnam, char *buffer, int bufsiz, unsigned char ses)
  179. {
  180.     NbNcbInit (ncb, NET_RECV, lnam, fnam);
  181.     ncb->LSN = ses;
  182.     ncb->Buffer.pfar = (struct NcbData far *) buffer;
  183.     ncb->Length = bufsiz;
  184.     return (NBCALL (ncb));
  185. }
  186.  
  187.